home *** CD-ROM | disk | FTP | other *** search
/ PC-X 1997 October / pcx14_9710.iso / swag / sorting.swg / 0059_Comb Sort Routine.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-08-30  |  1.4 KB  |  67 lines

  1. {
  2. CombSort is an extended BubbleSort algorithm which is nearly
  3. AS FAST AS MergeSort! I found it some months ago in an computer
  4. magazine. It is really useful, because it is really FAST and does
  5. not need much memory so I think it should be included into SWAG.
  6.  
  7. Thomas Dreibholz
  8.  
  9. The procedures sort an array <gArray> with <count> elements.
  10. }
  11.  
  12. procedure CombSort(count : Integer);
  13. var notChanged : Boolean;
  14.     i,j        : Integer;
  15.     gap        : Integer;
  16. begin
  17.  
  18.  gap := count;
  19.  repeat
  20.   notChanged := True;
  21.  
  22.   gap := Trunc(gap / 1.3);
  23.   case gap of
  24.    0:
  25.     gap := 1;
  26.    9:
  27.     gap := 11;
  28.    10:
  29.     gap := 11;
  30.   end;
  31.  
  32.   for i := 0 to count-gap do
  33.    if gArray[i]>gArray[i+gap] then
  34.     begin
  35.      j := gArray[i+gap];             { Tauschen von gArray[i] und gArray[i+gap] }
  36.      gArray[i+gap] := gArray[i];
  37.      gArray[i] := j;
  38.      notChanged := False;
  39.     end;
  40.  
  41.  until (notChanged) and (gap=1);
  42. end;
  43.  
  44.  
  45. For comparision: The standard BubbleSort procedure.
  46.  
  47. procedure BubbleSort(count : Integer);
  48. var notChanged : Boolean;
  49.     i,j        : Integer;
  50. begin
  51.  
  52.  repeat
  53.  
  54.   notChanged := True;
  55.   for i := 0 to count-1 do
  56.    if gArray[i]>gArray[i+1] then
  57.     begin
  58.      j := gArray[i+1];             { Tauschen von gArray[i] und gArray[i+1] }
  59.      gArray[i+1] := gArray[i];
  60.      gArray[i] := j;
  61.      notChanged := False;
  62.     end;
  63.  
  64.  until (notChanged);
  65. end;
  66.  
  67.